メモリ from 詳解システム・パフォーマンス
7章 メモリ
intel CPUだとTLBは命令かデータ化でわかれており、更にキャッシュ宜しくレベルがある(2段階)
フリーリスト
未使用ページが登録されるリスト
実際は色んな区分ごとに複数あるらしい
リーピング(reaping)
メモリ使用量が閾値を超えたときにすぐ開放できるメモリを解放するようにカーネルモジュールとスラブアロケータに支持できる仕組み
linuxだとスワップ以降、OOMキラー以前で使われる
ページアウトしているのはkswapdというデーモン
OOMキラー
select_bad_process()で見つけたプロセスをoom_kill_process()で強制終了してメモリを解放する
/var/log/messagesでOut of memoryでgrepしてみよう
dmesgとかでもとれる
スワッピングを禁止しても、ホットなページキャッシュがスラッシングしてレイテンシが落ちる問題に切り替わるだけ
むしろスワップ領域はページングの公平性によってシステムのパフォーマンスを上げてくれるものである
たとえばソフトウェアの初期化時にのみ必要な無名ページをスワッピングすることでよりヒットするページキャッシュを引き入れることができる
ワークロード分析のチェックリスト
avashe.icon以下を求めるオペレーション(手順)が全部さらっと出たらプロ
あとでbpftraceで追跡する練習したいな
基本
システムやプロセスの物理/仮想メモリの使用率
飽和の度合い
ページング、OOM killer
カーネルとファイルシステムのキャッシュメモリの使い方(量や割合)
リソースコントロールが使われている場合の特定方法
高度
カーネルやプロセスのメモリは何に使われているか
カーネルの場合、スラブアロケータ経由か
ページキャッシュのどれくらいがアクティブでどれくらいが非アクティブか
プロセスやカーネルがメモリをアロケートしているコールパスをどう追うか
活発にページアウトされているプロセスはどれか
以前ページアウトされていたことのあるプロセスはどれか
プロセスやカーネルにメモリリークはあるか
NUMAシステムにおいてメモリはメモリノード全体にどれくらい上手く分散されているか
CPIとメモリストールサイクルの発生頻度はどうなっているか
メモリバスはどれくらいバランスが取れているか
リモートメモリIOに対するローカルメモリIOの比率はどれくらいか